package bdddaosimpl;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import bdd.beans.*;
import bdddaos.DAOEnseignant;
import bdddaos.DAOEnseignant;
import bdddaos.DAOIndisponibilites;
import bdddaos.DAOIndisponibilites;
import bdddaos.DAORole;

public class DAOIndisponibiliteImpl implements DAOIndisponibilites{
	private DBLink dblink;

	public DAOIndisponibiliteImpl() {		
		super();
		this.dblink = new DBLink(); 
		this.dblink.connexion();
	}

	@Override
	public Indisponibilites save(Indisponibilites o) {
		try {
			this.dblink.connexion();
			String r = "INSERT INTO INDISPONIBILITES (HORAIRE, JOURS, DEGRE, NUMENSEIGNANT)" +
			" VALUES ("+o.getHoraire()+ ", "+ o.getJours() +", "+o.getDegre() + ", " + o.getEnseignant().getNumenseignant()+")";
			this.dblink.setPst(this.dblink.getConnection().prepareStatement(r));
			this.dblink.getPst().executeQuery();
			DAOOutils outil = new DAOOutils();
			o.setNumindisponibilite(outil.findMaxId("INDISPONIBILITES", "NUMINDISPONIBILITE"));
		}
		catch(SQLException se) {
			System.out.println("Erreur de requ�te : " + se);
		}
		finally{
			this.dblink.deconnexion();
		}
		return o;
	}

	@Override
	public Indisponibilites find(Integer id) {
		Indisponibilites retour = new Indisponibilites();
		retour.setNumindisponibilite(id);
		try {
			this.dblink.connexion();
			String r = "SELECT * FROM INDISPONIBILITES WHERE NUMINDISPONIBILITE = " + id;
			this.dblink.setPst(this.dblink.getConnection().prepareStatement(r));
			ResultSet rs = this.dblink.getPst().executeQuery();
			while(rs.next()) {
				System.out.println("test");
				retour.setDegre(rs.getInt("DEGRE"));
				retour.setHoraire(rs.getInt("HORAIRE"));
				retour.setJours(rs.getInt("JOURS"));
				DAOEnseignantImpl daoEnseignant = new DAOEnseignantImpl();
				retour.setEnseignant(daoEnseignant.find(rs.getInt("NUMENSEIGNANT")));
			}		
		}
		catch(SQLException se) {
			System.out.println("Erreur de requ�te" + se);
		}
		finally{
			this.dblink.deconnexion();
		}
		return retour;
	}

	@Override
	public List<Indisponibilites> findAll() {
		List<Indisponibilites> Lstretour = new ArrayList();
		try {
			this.dblink.connexion();
			this.dblink.setPst(this.dblink.getConnection().prepareStatement("SELECT * FROM INDISPONIBILITES"));
			ResultSet rs = this.dblink.getPst().executeQuery();
			while(rs.next()) {
				Indisponibilites retour = new Indisponibilites();
				retour.setDegre(rs.getInt("DEGRE"));
				retour.setHoraire(rs.getInt("HORAIRE"));
				retour.setJours(rs.getInt("JOURS"));
				retour.setNumindisponibilite(rs.getInt("NUMINDISPONIBILITE"));
				DAOEnseignantImpl daoEnseignant = new DAOEnseignantImpl();
				retour.setEnseignant(daoEnseignant.find(rs.getInt("NUMENSEIGNANT")));
				Lstretour.add(retour);
			}		
		}
		catch(SQLException se) {
			System.out.println("Erreur de requ�te" + se);
		}
		finally{
			this.dblink.deconnexion();
		}
		return Lstretour;
	}

	@Override
	public void update(Indisponibilites o) {
		try {
			this.dblink.connexion();
			String r = "UPDATE INDISPONIBILITES SET HORAIRE='"+o.getHoraire()+ "', JOURS='"+ o.getJours() +"', DEGRE='"+o.getDegre() + "', NUMENSEIGNANT=" + o.getEnseignant().getNumenseignant()+" WHERE NUMINDISPONIBILITE="+o.getNumindisponibilite();
			
			this.dblink.setPst(this.dblink.getConnection().prepareStatement(r));
			this.dblink.getPst().executeQuery();
		}
		catch(SQLException se) {
			System.out.println("Erreur de requ�te : " + se);
		}
		finally{
			this.dblink.deconnexion();
		}
	}

	@Override
	public void delete(Indisponibilites o) {
		try {
			this.dblink.connexion();
			String r = "DELETE FROM INDISPONIBILITES WHERE NUMINDISPONIBILITE="+o.getNumindisponibilite();
			
			this.dblink.setPst(this.dblink.getConnection().prepareStatement(r));
			this.dblink.getPst().executeQuery();
		}
		catch(SQLException se) {
			System.out.println("Erreur de requ�te : " + se);
		}
		finally{
			this.dblink.deconnexion();
		}
	}

	@Override
	public List<Indisponibilites> findByEnseignant(Integer numEnseignant) {
		List<Indisponibilites> liste = new ArrayList();
		dblink.connexion();
		
		String query = "select * from indisponibilites where numenseignant = "+numEnseignant;
		
		try {
			PreparedStatement pst = dblink.getConnection().prepareStatement(query); 
			ResultSet rs = pst.executeQuery();
			
			while(rs.next()) {
				Indisponibilites i = new Indisponibilites();
				i.setNumindisponibilite(rs.getInt("NUMINDISPONIBILITE"));
				i.setHoraire(rs.getInt("HORAIRE"));
				i.setJours(rs.getInt("JOURS"));
				i.setDegre(rs.getInt("DEGRE"));
				
				DAOEnseignant daoEnseignant = new DAOEnseignantImpl();
				i.setEnseignant(daoEnseignant.find(rs.getInt("NUMENSEIGNANT")));
				
				liste.add(i);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			dblink.deconnexion();
		}
		
		return liste;
	}

}
